<?php
namespace Amis\other;

use Amis\Basics\AmisBasics;

class Tasks extends AmisBasics
{
    public string $type = 'tasks';

    public function className($className)
    {
        $this->className = $className;
        return $this;
    }

    public function tableClassName(string $tableClassName)
    {
        $this->tableClassName = $tableClassName;
        return $this;
    }

    /**
     * 任务列表
     * items[x].label    string        任务名称
     * items[x].key    string        任务键值，请唯一区分
     * items[x].remark    string        当前任务状态，支持 html
     * items[x].status    string        任务状态： 0: 初始状态，不可操作。1: 就绪，可操作状态。2: 进行中，还没有结束。3：有错误，不可重试。4: 已正常结束。5：有错误，且可以重试。
     * @param array $items
     * @return $this
     */
    public function items(array $items)
    {
        $this->items = $items;
        return $this;
    }

    /**
     * 返回任务列表，返回的数据请参考 items。
     * @param array $checkApi
     * @return $this
     */
    public function checkApi(string $checkApi)
    {
        $this->checkApi = $checkApi;
        return $this;
    }

    /**
     * 提交任务使用的 API
     * @param string $submitApi
     * @return $this
     */
    public function submitApi(string $submitApi)
    {
        $this->submitApi = $submitApi;
        return $this;
    }

    /**
     * 如果任务失败，且可以重试，提交的时候会使用此 API
     * @param string $reSubmitApi
     * @return $this
     */
    public function reSubmitApi(string $reSubmitApi)
    {
        $this->reSubmitApi = $reSubmitApi;
        return $this;
    }

    /**
     * 当有任务进行中，会每隔一段时间再次检测，而时间间隔就是通过此项配置，默认 3s。
     * @param int $interval
     * @return $this
     */
    public function interval(int $interval = 3000)
    {
        $this->interval = $interval;
        return $this;
    }

    /**
     * 任务名称列说明
     * @param string $taskNameLabel
     * @return $this
     */
    public function taskNameLabel(string $taskNameLabel = '任务名称')
    {
        $this->taskNameLabel = $taskNameLabel;
        return $this;
    }

    public function operationLabel(string $operationLabel = '操作')
    {
        $this->operationLabel = $operationLabel;
        return $this;
    }

    public function statusLabel(string $statusLabel = '状态')
    {
        $this->statusLabel = $statusLabel;
        return $this;
    }

    public function remarkLabel(string $remarkLabel = '备注')
    {
        $this->remarkLabel = $remarkLabel;
        return $this;
    }

    public function btnText(string $btnText = '上线')
    {
        $this->btnText = $btnText;
        return $this;
    }

    public function retryBtnText(string $retryBtnText = '重试')
    {
        $this->retryBtnText = $retryBtnText;
        return $this;
    }

    /**
     * 配置容器按钮 className
     * @param string $btnClassName
     * @return $this
     */
    public function btnClassName(string $btnClassName = 'btn-sm btn-default')
    {
        $this->btnClassName = $btnClassName;
        return $this;
    }

    public function retryBtnClassName(string $retryBtnClassName = 'btn-sm btn-danger')
    {
        $this->retryBtnClassName = $retryBtnClassName;
        return $this;
    }

    /**
     * 状态显示对应的类名配置
     * ["label-warning", "label-info", "label-success", "label-danger", "label-default", "label-danger"]
     * @param array $statusLabelMap
     * @return $this
     */
    public function statusLabelMap(array $statusLabelMap = ["label-warning", "label-info", "label-success", "label-danger", "label-default", "label-danger"])
    {
        $this->statusLabelMap = $statusLabelMap;
        return $this;
    }

    /**
     * 状态显示对应的文字显示配置
     * @param array|string[] $statusTextMap
     * @return $this
     */
    public function statusTextMap(array $statusTextMap = ["未开始", "就绪", "进行中", "出错", "已完成", "出错"])
    {
        $this->statusTextMap = $statusTextMap;
        return $this;
    }
}